import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-06-10
 * Time: 23:10
 */
public class Solution {
    public String simplifyPath(String path) {
        // 直接使用双端队列
        Deque<String> deque = new ArrayDeque<>();
        String[] arr = path.split("/");
        for (String s: arr) {
            // 分出来当 // 时会分出来多余的空格
            if ("".equals(s)) {
                continue;
            }
            if (s.equals(".")) {
                // 什么都不做
            }else if (s.equals("..")) {
                if (!deque.isEmpty()) {
                    // 栈不为空时弹出当前路径, 否则什么都不做
                    deque.pop();
                }
            }else{
                // 正常情况
                deque.push(s);
            }
        }
        StringBuilder stringBuilder = new StringBuilder();
        // 如果最后的结果为空, 那么直接返回 "/"
        if (deque.isEmpty()) {
            stringBuilder.append("/");
        }
        while (!deque.isEmpty()) {
            // 每加入一级路径都要加上 "/"
            // 每次都是取队尾
            // 注意这里面一定用两个 append, 不要用 "+", 这样效率会提高很多
            stringBuilder.append("/").append(deque.pollLast());
        }
        return stringBuilder.toString();
    }
}
